#####################################################
### Pre-Settings
#####################################################
CC			= gcc
CXX			= g++
CFLAGS		= -g -O2 -pipe
CXXFLAGS	= $(CFLAGS) -std=c++11 -pthread
INCS		= -I./Include -I./Include/Lua

OUTDIR		= Lib
OUTPUT		= $(OUTDIR)/libengine.a
OBJDIR		= Build/Linux

### Where did you put source files.
SEARCH		= Source Source/Lua Source/MiniZ

######################################################
### Auto-Generate
######################################################
SRCS		= $(foreach path, $(SEARCH), $(wildcard $(path)/*.cpp)) $(foreach path, $(SEARCH), $(wildcard $(path)/*.c))
OBJS		= $(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS)) $(patsubst %.c, $(OBJDIR)/%.o, $(SRCS))
DIRS		= $(sort $(patsubst %/, %, $(dir $(OBJS)) $(OUTDIR)))

######################################################
### Targets - Static Library
######################################################
library: pre_build_lib build_lib

pre_build_lib:
	@echo -e "\033[36m=== Start To Build Library Engine ===\033[0m"
	@test -d "$(DIRS)" || mkdir -p $(DIRS)

build_lib: $(OBJS)
	@echo -e "\033[36m>>>> Generate Static Library Engine ... $(OUTPUT)\033[0m"
	@find Build/Linux/ -name *.o -exec ar rcu ${OUTPUT} {} \; 	

######################################################
### Targets - Clean
######################################################
clean:
	@rm -rf Build $(OUTDIR)

######################################################
### Build Rules
######################################################
$(OBJDIR)/%.o: %.cpp
	@echo -e "\033[33m---> Compiling $< ...\033[0m"
	@$(CXX) $(CXXFLAGS) -c $< -o $@ $(INCS)

$(OBJDIR)/%.o: %.c
	@echo -e "\033[33m---> Compiling $< ...\033[0m"
	@$(CC) $(CFLAGS) -c $< -o $@ $(INCS)
